工控网首页
>

应用设计

>

Toradex WinCE 库演进:新的库文件方法说明

Toradex WinCE 库演进:新的库文件方法说明

1). 概述

Windows十多年之前,为了演示我们的 计算机模块 ,或者称为 系统模块(SoM),我们编写了一些WinCE 的代码。例如 GPIO、I2C、模拟输入等。当时我们只是为了纯粹的演示目的,并没有关系诸如维护、不同模块之间的兼容性等问题。然而,这些演示程序却被大量 Windows Embedded Compact 用户所采用。我们收到越来越多的技术支持和功能要求,于是我们开始将其集成到演示代码中去。最终,我们有了今天的针对基于 PXA 和 Tegra® 系统模块的库文件包。通过这些库文件可以可靠和方便地使用我们的模块。但是,迭代维护和为新功能提供 API 却没有那么容易。

当我们为我们的模块系列家族添加新的处理器(片上系统或者 SoC),我们决定停止扩展旧的 API,而是采用一套全新的 API,我们可以把过去获得的经验都倾注其中。我们称这套新的库文件包为“Toradex CE Libraries”。该库文件包的目标和我们原来的一样:使我们的用户能够方便地使用系统模块的功能。

但是,我们三个非常重要的要求:

./ 可扩展,并可兼容的 API

./ 允许通过注册表配置库文件

./ 易于维护

我们将在新的库文件包中满足三个所有的要求。

2). 可扩展,并可兼容的API

为了保持我们的 API 满足将来的需求,我们决定引入两套调用 API。第一种是通常的做法,使用字符串或者整数将信息传递给库。下面演示了如何将一个系统模块的引脚设置为 GPIO 输入,并调用 SetConfigString 函数激活下拉电阻:

-----------------------------

// Set pin to alternate function GPIO,Input with pull-down

success = Gpio_SetConfigString(hGpio, io1,NULL, L"altfn=ioAltFnGpio,dir=in,pull=down", StoreVolatile);

-----------------------------

另外一个例子是调用 SetConfigInt 函数将 I2C 控制器的速率设置为 400KHz:

-----------------------------

// Set I2C speed to 400KHz

success = I2c_SetConfigInt(i2c,L"BitRateHz", 400000, StoreVolatile);

-----------------------------

采用字符串的方法允许我们保持 API 的 100% 兼容,并且在将来可以添加现在系统模块还没有的更多功能。

第二套调用的 API 主要出于性能或者采用标准函数的原因。下面是一个 GPIO 库文件中修改一个 GPIO 的函数例程。调用 SetConfigString 或者 Set ConfigInt 可以实现同样的目的,出于性能考虑,我们提供了不需要字符串解析的函数。

-----------------------------

// Set it to Output,  High

Gpio_ConfigureAsGpio(hGpio, io1);

Gpio_SetDir         (hGpio, io1, ioOutput);

Gpio_SetLevel       (hGpio, io1, ioHigh);

-----------------------------

我们看看采用标准函数读取 I2C 的例程。因为性能缘故,我们决定不采用一般字符串的方法(例如上的 Get/SetConfig),但是由于读 I2C(以及类似的函数)已经固定,无法针对将来的 SoC 做改变。

-----------------------------

returnValue = I2c_Read(i2c, (DWORD*) data,8);

-----------------------------

3). 允许通过注册表配置库文件

正如前面看到的,我们可以通过字符串和整数配置库文件。例如也可以在注册表中配置 SPI 库使用特定 SPI 接口、片选信号、波特率等,在你的应用启动的时候加载配置。如果你采用下面的方法加载库:

-----------------------------

hSPI = Spi_Init(L"SPI2");

-----------------------------

库文件会自动从注册表下面的位置加载配置:

-----------------------------

[HKEY_LOCAL_MACHINE\SOFTWARE\Toradex\SPI2]

BitRateHz=500000

DmaEnable=1

etc.

-----------------------------

你也许会想,这有什么好处。其中一个很好的优势是,可以针对不同设备只维护一个应用。例如,你可以在基于 NXP®(或者可以写为高通)i.MX6 处理器以及 NXP Vybrid 系统模块上使用相同的应用。模块之间唯一的不同是引脚配置,现在这些可以保持在注册表中。剩余的部分完全相同,因此允许你在不同的系统模块上使用一个二进制应用,使得您的开发更加容易。

4). 易于维护

在本文的最后我想重点介绍“为维护而设计”方面。为了我们能够简单、安全地维护,我们根据每一种 SoC 将库文件分为单独的源代码文件。这确保我们能够在修复漏洞或者增加 SoC 相关功能的时候,保持其他 SoC 部分的代码不变。这降低了破坏现有代码的风险,因此也使得我们的软件总体上更加稳健。

5). 参考

您可以在我们的开发者中心 中找到所支持功能的列表以及下载库文件、API说明等。

同样欢迎您查看我们的library roadmap,我们公开了所以已知的问题和我们计划解决的时间。

投诉建议

提交

查看更多评论
其他资讯

查看更多

Verdin AM62 LVGL 移植

基于 NXP iMX8MM 测试 Secure Boot 功能

隆重推出 Aquila - 新一代 Toradex 计算机模块

Verdin iMX8MP 调试串口更改

NXP iMX8MM Cortex-M4 核心 GPT Capture 测试